from django.shortcuts import render
from django.core.urlresolvers import reverse
from django.http import HttpResponse,JsonResponse
from ..models import Types
from django.db.models import Q
from django.contrib.auth.decorators import permission_required
# 定义 所属分类函数
def pname(list):
    for x in list:
        if x.pid == 0:
            x.pname = '顶级分类'
        else:
            ob = Types.objects.get(id = x.pid)
            x.pname = ob.name

def Gettypesall():
    # # 获取所有的分类  并排序
    # select *,concat(path,id) as paths from myadmin_types order by paths;   自写sql语句
    typelist = Types.objects.extra(select = {'paths':'concat(path,id)'}).order_by('paths')
    # typelist = Types.objects.extra(select={'paths': 'concat(path,id)'}).order_by('paths')
    # 调用pname 函数
    pname(typelist)
    return typelist

# 分类添加页面显示
@permission_required('myadmin.insert_types',raise_exception = True)
def types_add(request):
    # 分配数据
    context = {'typelist':Gettypesall()}
    # 返回页面
    return render(request,'admin/types/add.html',context)

# 添加数据
@permission_required('myadmin.insert_types',raise_exception = True)
def types_insert(request):
    try:
        # 接收提交的数据
        data = request.POST.dict()
        # print(data)
        # 弹出 csrf
        data.pop('csrfmiddlewaretoken')
        print(data)
        # 判断当前是否为顶级分类
        if data['pid'] == '0':
           data['path'] = '0,'
        else:
            # 获取父级对象
            ob = Types.objects.get(id=data['pid'])
            # ob = Types.objects.get(id=data['pid'])
            # 根据 父级对象 path 和我当前选择的pid+',' 进行拼接
            data['path'] = ob.path+data['pid']+','
            data['path'] = ob.path+data['pid']+','
        # 创建对象 提交数据
        Types.objects.create(**data)
        return render(request,'info.html',{'msg':'添加成功','url':reverse('admin_types_list')})
    except:
        return render(request, 'info.html', {'msg': '添加失败', 'url': reverse('admin_types_add')})

#  分类列表
@permission_required('myadmin.show_types',raise_exception = True)
def types_list(request):
#  搜索
    #接收参数搜索条件
    types = request.GET.get('types',None)              # name
    keywords = request.GET.get('keywords',None)         # 手机
    # 通过类名找到id
    print(types)
    typelist = Gettypesall()
    #  判断是否有 搜索条件上传
    if types:
        # 如果有搜索条件上传  且 以 所属分类搜索
        if types == 'pid':
            # 根据 名字 获取该元素对象
            ob = Types.objects.filter(name__contains = keywords)
            #  获取pid在元素对象内的元素
            typelist = typelist.filter(pid__in=ob)
            # 调用所属分类函数
            pname(typelist)
        else :
            #  查找一级分类下的 所有名字符合的 数据
            typelist = typelist.filter(Q(pid=0)&Q(name__contains = keywords))
            # 调用所属分类函数
            pname(typelist)
# 数据分页  导入分页模块
    from django.core.paginator import Paginator
    # 实例化分页对象  参数1：数据列表   参数2：每页显示的条数
    p = Paginator(typelist,10)
    # 获取当前的页码数 有传页码数显示页码  没有显示 1
    page = request.GET.get('page',1)
    # 获取当前页的数据
    typelist = p.page(page)
    # 获取所有的页码数列表
    pages = p.page_range

#     分配数据
    context = {'typelist':typelist}
    return render(request,'admin/types/list.html',context)

# 删除
@permission_required('myadmin.del_types',raise_exception = True)
def types_delete(request):
#     接收用户传来的id  获取数据对象
    ob = Types.objects.get(id=request.GET['id'])
#     判断当前类下是否还有字类   (还有 分类pid 等于 当前元素id 就还有子分类）count() 统计个数 如果为 0 则没有了
    if Types.objects.filter(pid=ob.id).count():
        return JsonResponse({'errorcode':1,'msg':'当前元素分类还存在子分类  无法删除'})

    # 没有子类  也没有商品就可以删除
    ob.delete()
    return JsonResponse({'errorcode':0,'msg':'删除成功'})

# 修改类名
@permission_required('myadmin.edti_types',raise_exception = True)
def types_upname(request):
    # 根据id获取对象
    ob = Types.objects.get(id=request.GET['id'])
    # 修改类名
    ob.name = request.GET['name']
    ob.save()
    return JsonResponse({'errorcode':0,'msg':'修改成功'})